package org.game.module.playerbo;

import java.util.List;
import java.util.concurrent.ConcurrentLinkedQueue;

import org.bean.AccountInfo;
import org.game.db.bean.Player;
import org.game.db.cache.PlayerCache;
import org.game.manager.PlayerManager;

import com.google.common.collect.Queues;
import com.sojoys.artifact.manager.ThreadManager;
import com.xiaoleilu.hutool.util.RandomUtil;

/**
 * @author : DengYing
 * @CreateDate : 2017年11月13日 下午5:56:01
 * @Description ：玩家创建工厂，采用队列预创建。以免导量过大造成玩家创建过载！
 */
public class PlayerFactory {
	
	private PlayerFactory() {
	}

	private static PlayerFactory ME = new PlayerFactory();

	public static PlayerFactory me() {
		return ME;
	}
	
	/** 玩家池 */
//	private ConcurrentLinkedQueue<Player> playerPool = Queues.newConcurrentLinkedQueue();
	
	/** 获取一个玩家 */
	public Player poll(AccountInfo info){
//		if (!playerPool.isEmpty()) {
//			Player player = playerPool.poll();
//			// 批量创建
//			asynBatchCreatePlayer();
//			player.setUid(info.getUid());
//			player.setLanguage(info.getLanguage());
//			player.setPre(false);
//			return player.update();			
//		}else {
			return PlayerManager.me().createPlayer(info,false);
//		}
	}
//	
//	private Player createPlayer(){
//		AccountInfo info = new AccountInfo();
//		info.setUid(RandomUtil.randomUUID());
//		info.setLanguage("");
//		return PlayerManager.me().createPlayer(info,true);
//	}
//	
//	/**
//	 * 批量创建
//	 */
//	private void asynBatchCreatePlayer(){
//		if(playerPool.size() > 5)
//			return;
//		
//		ThreadManager.me().execute("taskExecutor", new Runnable() {
//			@Override
//			public void run() {
//				syncBatchCreatePlayer();
//			}
//		});
//		
//	}
//	
//	
//	private void syncBatchCreatePlayer() {
//		// 一次性创建多个
//		for (int i = 0; i < 10; i++) {
//			playerPool.offer(createPlayer());
//		}
//	}
//	
	/**
	 * 
	 */
	public void init(){
//		List<Player> prePlayers = PlayerCache.me().getByPre(true);
//		playerPool.addAll(prePlayers);
//		if(playerPool.size() > 5)
//			return;
//		// 不够则创建
//		syncBatchCreatePlayer();
	}
}
